#include "TestAlmacenamientoMasivoVariables.h"

#include "../src/recursoDeAlmacenamiento/FabricaRecursosAlmacenamiento.h"
#include "../src/recursoDeAlmacenamiento/RecursoDeAlmacenamiento.h"
#include "../src/estrategiaAlmacenamiento/EstrategiaAlmacenamientoBloques.h"
#include "../src/recursoDeAlmacenamiento/RecursoDeAlmacenamientoDirecto.h"
#include "../src/FuncionesUtiles.h"
#include "../src/estrategiaRecurso/Archivo.h"
#include "../src/estrategiaAlmacenamiento/Iterador.h"
#include "../src/Bytes.h"

TestAlmacenamientoMasivoVariables::TestAlmacenamientoMasivoVariables() {


}

TestAlmacenamientoMasivoVariables::~TestAlmacenamientoMasivoVariables() {

}

void TestAlmacenamientoMasivoVariables::run() {

	this->test();
}

void TestAlmacenamientoMasivoVariables::test() {

	string path = "./Archivos/bloquesMasivo";
	system("rm ./Archivos/bloquesMasivo*");

	cantBytes tamanioBloque = 512;
	RecursoDeAlmacenamiento* recurso = FabricaRecursosAlmacenamiento::getFabrica()->crearRecursoArchivoBloques(path, tamanioBloque,DIFERIDA, FABRICA_BLOQUES_COMPRIMIDOS);

	cantBytes cantRegistros = 10000;

	cout << "Se cargaran 10 mil registros, espere unos segundos..." << endl;

	for (cantBytes i = 0 ; i < cantRegistros; i++) {
		stringstream ss;
		ss << i;

		Bytes dato("dato");
		dato.agregarAlFinal(ss.str());

		recurso->guardar(dato);
	}

	Iterador *it = recurso->getIterador();
	cantBytes i = 0;

	while (it->tieneSiguiente()) {
		stringstream ss;
		ss << i;
		i++;
		Bytes dato("dato");
		dato.agregarAlFinal(ss.str());

		Bytes datoCargado = it->getSiguiente();

		assert(datoCargado.toString() == dato.toString(),"Test Masivo Registros Variables " + dato.toString());
	}

	delete recurso;
	delete it;
}
